<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // var arr = [1,2,3];
  // var obj = {a:1,b:2};


  // var list = [1,2,[3,4]];

  // list[2][0]


  // 深复制(数组)
  // 在不影响原数组的情况下 得到一个与原数组元素相同的新数组

  // //普通深复制 只针对纯值类型元素的的数组有效,对于二维数组和多维数组 无效
  // var list = [1,2,[3,4]];   

  // var arr = [];
  // for(var i=0;i<list.length;i++){
  //     var item = list[i];  // 1 2  vaar item = list[2]
  //     arr.push(item);
  // }
  // list[2].push(5);
  // console.log(arr,list);
  // console.log(arr[2] === list[2]);

  // 递归深复制
  var list = [1, 2, [3, 4]];

  var arr = [];
  for (var i = 0; i < list.length; i++) {
    var item = list[i];  // 1 2  vaar item = list[2]
    if (Array.isArray(item)) {  //如果是数组
      var brr = [];
      for (var j = 0; j < item.length; j++) {
        var each = item[j]
        brr.push(each);
      }
      arr.push(brr);
    } else { //不是数组
      arr.push(item);
    }
  }

  // var list = [1,2,[3,4,[5,6,[7,8]]]];

  // var list = [1,2,3,4,5,[1,1,[2,2]]];
  // var list = [1,2,3,4,5,[1,1,[2,2]]];

  var list = [1, 2, [3, 4, [5, 6, [7, 8]]]];

  var result = deepCopy(list);

  // deepCopy([1,2,[3,4,[5,6,[7,8]]]]) => deepCopy([3,4,[5,6,[7,8]]]) => deepCopy([5,6,[7,8]]) => deepCopy([7,8])
  //                                                                                                   ||    
  //          [1,2,[3,4,[5,6,[7,8]]]]          [3,4,[5,6,[7,8]]]         [5,6,[7,8]]             <=   [7,8] 

  // console.log(result);

  function deepCopy(list) {
    console.log(list);
    var arr = [];
    for (var i = 0; i < list.length; i++) {
      var item = list[i];
      if (Array.isArray(item)) { // 如果是数组 将数组复制 => 将复制后的数组放到新数组中
        var brr = deepCopy(item);// [1,1,[2,2]]   [2,2]
        arr.push(brr);
      } else { //不是数组
        arr.push(item);
      }
    }
    return arr; // 如果数组是一个纯数值元素组成的数组 则复制之后返回该数组
  }


  // 以后的简单方法 => JSON
  var str = JSON.stringify(list);
  console.log(str);
  var arr = JSON.parse(str);
  console.log(arr);



</script>

</html>